home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / N-P / NIFTY / myCShell / menu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-20  |  3.8 KB  |  216 lines  |  [TEXT/KAHL]

  1. /*********************************************************
  2.  "menu.c"
  3.  
  4.  by John A. Love, III [ Washington Apple Pi Users' Group]
  5.  
  6.  using Symantec's "THINK C", v 5.00
  7.  *********************************************************/
  8.  
  9.  
  10. #include <Balloons.h>
  11.  
  12. #include "protos"
  13.  
  14. #include "globals.h"
  15. #include "extern.h"
  16.  
  17. #include "floatingWindow.h"
  18.  
  19.  
  20.  
  21.  
  22.     Boolean                currEdit = true;
  23.     extern DialogPtr    helpPtr;
  24.  
  25.  
  26.  
  27. void    SetUpMainMenus (void)    {
  28.  
  29.         short    none = 0;
  30.         
  31.  
  32.     gAppleMenu = GetMenu(AppleMenuID);
  33.     if (!gSys7)    {
  34.         SetItemIcon(gAppleMenu, AboutItem, none);
  35.         SetItemCmd(gAppleMenu, AboutItem, (char)none);
  36.     }
  37.     InsertMenu(gAppleMenu, 0);
  38.     AddResMenu(gAppleMenu, 'DRVR');                /* + DAs */
  39.     ;
  40.     gFileMenu = GetMenu(FileMenuID);
  41.     InsertMenu(gFileMenu, 0);
  42.     ;
  43.     gEditMenu = GetMenu(EditMenuID);
  44.     InsertMenu(gEditMenu, 0);
  45.  
  46.     gHelpMenu = nil;
  47.     if (HelpManagerActive())
  48.         if (HMGetHelpMenuHandle(&gHelpMenu) == noErr)
  49.             if (gHelpMenu != nil)    {
  50.                 gOrigNumHelpItems = CountMItems(gHelpMenu);
  51.                 AppendMenu(gHelpMenu, "\pAbout my application ...");
  52.             }
  53.  
  54.     DrawMenuBar();
  55.  
  56. }    /* SetUpMainMenus */
  57.  
  58.  
  59.  
  60. /* ------------------------------------------------------------
  61. ** HandleMenu is the dispatch routine for the main MenuBar.
  62. ** The item selected is passed to the appropriate menu handler.
  63. ** ------------------------------------------------------------ */
  64.  
  65. void    HandleMenu (EventRecord *event)    {
  66.  
  67.         long    menuCode;
  68.         char    charCode;
  69.         long    finalTicks;
  70.  
  71.  
  72.     if (event->what == mouseDown)    menuCode = MenuSelect(event->where);
  73.     else    {
  74.         charCode = event->message & charCodeMask;
  75.         menuCode = MenuKey(charCode);
  76.     }    /* else */
  77.  
  78.     switch    (HiWord(menuCode))    {
  79.     
  80.         case AppleMenuID:
  81.             DoApple(LoWord(menuCode));
  82.             break;
  83.  
  84.         case FileMenuID:
  85.             DoFile(LoWord(menuCode));
  86.             break;
  87.  
  88.         case EditMenuID:
  89.             DoEdit(LoWord(menuCode));
  90.             break;
  91.  
  92.         case kHMHelpMenuID: 
  93.             if (LoWord(menuCode) == gOrigNumHelpItems + 1)
  94.             /* User selected my Item which I appended in "SetupMainMenus" PROC. */
  95.                 DoApple(AboutItem);
  96.             break;
  97.             
  98.         default:
  99.             if (event->what == keyDown)        {
  100.                 SysBeep(10);
  101.                 break;
  102.             }
  103.             
  104.     }    /* end switch */
  105.  
  106.     if (event->what == keyDown)        Delay(10, &finalTicks);        // Do NOT ask ?!*!?
  107.     HiliteMenu(0);
  108.     
  109. }    /* HandleMenu */
  110.  
  111.  
  112.  
  113. /* ----------------------------------------------
  114. ** DoApple is the code for the main "Apple" Menu.
  115. ** The other two main Menus follow.
  116. ** ---------------------------------------------- */
  117.  
  118. void    DoApple (short item)    {
  119.  
  120.         GrafPtr        oldPort;
  121.         Str255        accName;
  122.         short        accNumber;
  123.  
  124.  
  125.     switch (item)    {
  126.  
  127.         case AboutItem:
  128.             if (helpPtr /* != nil */)    {
  129.                 if (! ((WindowPeek)helpPtr)->hilited)    TSelectWindow(helpPtr);
  130.              // else    already up front.
  131.             }
  132.             else    Create_Help();
  133.             break;
  134.             
  135.         case AdisabledItem:
  136.             break;                // NEVER seen -- shown for completeness, only.
  137.             
  138.         default:
  139.             GetPort(&oldPort);
  140.             ;
  141.             GetItem(gAppleMenu, item, accName);
  142.             accNumber = OpenDeskAcc(accName);
  143.             ;
  144.             SetPort(oldPort);
  145.             break;
  146.  
  147.     }    /* end switch */
  148.  
  149. }    /* DoApple */
  150.  
  151.  
  152.  
  153. void    DoFile (short item)        {
  154.  
  155.  
  156.     switch (item)    {
  157.  
  158.         case QuitItem: 
  159.             DoQuit();
  160.             break;
  161.             
  162.         default:
  163.             break;
  164.             
  165.     }    /* end switch */
  166.  
  167. }    /* DoFile */
  168.  
  169.  
  170.  
  171. void    DoEdit (short item)        {
  172.  
  173.  
  174.     if (SystemEdit(item - 1))    return;                /* DAs do their own thing !! */
  175.  
  176.     switch (item)    {
  177.  
  178.         case UndoItem:
  179.         case EdisabledItem:
  180.         case CutItem:
  181.         case CopyItem:
  182.         case PasteItem:
  183.         case ClearItem:
  184.             break;
  185.             
  186.     }    /* end switch */
  187.  
  188. }    /* DoEdit */
  189.  
  190.  
  191.  
  192. /* ----------
  193. ** Bye-Bye !!
  194. ** ---------- */
  195.  
  196. void    DoQuit (void)    {
  197.  
  198.  
  199.     gDone = true;
  200.     ;
  201.     Kill_Help_Window();
  202.     DoCloseAll();
  203.     /* For HandleCursor() ... BUT it appears DoPeriodic() is
  204.     ** called anyway after DoCloseAll().  DoPeriodic() calls
  205.     ** PeriodicWindows() which will set gFW to NIL because
  206.     ** there are now NO windows.                             */
  207.     gFW = nil;
  208.     HandleCursor();                /* Get rid of color CRSR if needed. */
  209.  
  210. }    /* DoQuit */
  211.  
  212.  
  213.  
  214.  
  215. /*    { end file "menu.c" }  */
  216.